package maths

import (
	"gitee.com/leminewx/gokit"
)

// CalculateAverage 计算均值
func CalculateAverage[T gokit.Number](values ...T) (avg float64) {
	length := len(values)
	if length == 0 {
		return
	}

	return float64(Sum(values...)) / float64(length)
}

// Sum 对一系列数据进行求和
func Sum[T gokit.Number](values ...T) (sum T) {
	for _, val := range values {
		sum += val
	}

	return sum
}

// Count 统计数据中各个值的个数
func Count[T gokit.Number](values ...T) map[T]int {
	count := make(map[T]int)
	if len(values) == 0 {
		return count
	}

	for _, v := range values {
		count[v]++
	}

	return count
}

// Range 获取数据的取值范围
func Range[T gokit.Number](values ...T) (min, max T) {
	max, min = values[0], values[0]
	for _, val := range values[1:] {
		if val < min {
			min = val
		}

		if val > max {
			max = val
		}
	}

	return
}
